home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / byte0387.arc / EDGINTON.ARC / LIST7.TXT < prev   
Text File  |  1986-07-16  |  2KB  |  113 lines

  1. ; These routines emulate a push-all of the
  2. ; registers and segregs before an interrupt
  3. ; is executed, and then pop them in the
  4. ; same order. 
  5. ; Note: cpopt is used for testing so we use
  6. ; a ret instead of a iret.
  7.  
  8.  
  9.     TITLE    REGISTER MANIPULATION ROUTINES
  10.     SUBTTL   Copyright 1986 by Brian Edginton 
  11.     NAME     STORE
  12.     INCLUDE  DOS.MAC
  13.  
  14.     DSEG
  15. ; Register and stack storage structure follows.
  16. S    STRUC
  17.     RAX    DW    ?
  18.     RBX    DW    ?
  19.     RCX    DW    ?
  20.     RDX    DW    ?
  21.     RSI    DW    ?
  22.     RDI    DW    ?
  23.     RDS    DW    ?
  24.     RCS    DW    ?
  25.     RSS    DW    ?
  26.     RES    DW    ?
  27.     RIP    DW    ?  ; Storage for 2 words
  28.     RBP    DW    ?  ; pushed for iret
  29.     RFL    DW    ?  ; and flags.
  30.     RRT    DW    ?  ; Return address
  31.                            ; pushed for call.
  32. S    ENDS
  33. STORAGE    S    <0,0,0,0,0,0,0,0,0,0,0,0>
  34.     ENDDS
  35.  
  36.     
  37.     PSEG
  38.  
  39.     ;  name - cpush()
  40.     ;  Pushes all the registers and segregs
  41.         ;  and flags onto the stack.  Use with
  42.         ;  cpop() to restore in correct order.
  43.  
  44.     PUBLIC    CPUSH
  45.     IF    LPROG
  46. CPUSH    PROC    FAR
  47.     ELSE
  48. CPUSH    PROC    NEAR
  49.     ENDIF
  50.  
  51.     POP    STORAGE.RRT
  52.     POP    STORAGE.RIP     ; SAVE RETI IP,
  53.     POP    STORAGE.RCS     ; SAVE RETI CS,
  54.     POP    STORAGE.RFL     ; SAVE THE FLAGS,
  55.     MOV    STORAGE.RAX,AX  ; AND TUCK AWAY
  56.     MOV    STORAGE.RBX,BX  ; ALL REGISTERS.
  57.     MOV    STORAGE.RCX,CX
  58.     MOV    STORAGE.RDX,DX
  59.     MOV    STORAGE.RDI,DI
  60.     MOV    STORAGE.RSI,SI
  61.     MOV    STORAGE.RDS,DS  ; GET THE SEGMENT
  62. ;    MOV    STORAGE.RSS,SS  ; REGISTERS.
  63.     MOV    STORAGE.RES,ES 
  64.     PUSH    STORAGE.RRT     ; PUT CALL RETURN
  65.                                 ; ADDRESS ON STACK.
  66.     RET
  67. CPUSH    ENDP
  68.     
  69.     PUBLIC    CPOP
  70.     IF    LPROG
  71. CPOP    PROC    FAR
  72.     ELSE
  73. CPOP    PROC    NEAR
  74.     ENDIF
  75.  
  76.     PUSH    STORAGE.RFL     ; RESTORE FLAGS.
  77.     PUSH    STORAGE.RCS     ; RESTORE CS, 
  78.     PUSH    STORAGE.RIP     ; THEN IP.
  79.     MOV    ES,STORAGE.RES
  80.     MOV    DS,STORAGE.RDS
  81.     MOV    SI,STORAGE.RSI
  82.     MOV    DI,STORAGE.RDI
  83.     MOV    DX,STORAGE.RDX
  84.     MOV    CX,STORAGE.RCX
  85.     MOV    BX,STORAGE.RBX  ; READY FOR IRET 
  86.     MOV    AX,STORAGE.RAX  ; WITH OLD IP AND
  87.     IRET                    ; STUFF ON STACK.
  88. CPOP    ENDP
  89.  
  90.           PUBLIC    CPOPT
  91.     IF    LPROG
  92. CPOPT    PROC    FAR
  93.     ELSE
  94. CPOPT    PROC    NEAR
  95.     ENDIF
  96.     PUSH    STORAGE.RFL     ; RESTORE FLAGS.
  97.     PUSH    STORAGE.RCS     ; RESTORE CS, 
  98.     PUSH    STORAGE.RIP     ; THEN IP.
  99.     MOV    ES,STORAGE.RES
  100.     MOV    DS,STORAGE.RDS
  101.     MOV    SI,STORAGE.RSI
  102.     MOV    DI,STORAGE.RDI
  103.     MOV    DX,STORAGE.RDX
  104.     MOV    CX,STORAGE.RCX
  105.     MOV    BX,STORAGE.RBX  ; READY FOR IRET 
  106.     MOV    AX,STORAGE.RAX  ; WITH OLD IP AND
  107.     RET                     ; STUFF ON STACK.
  108.  
  109. CPOPT    ENDP
  110.     ENDPS
  111.     END
  112.  
  113.